package com.atguigu.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * RequestMapping的模糊匹配功能
 *      URL地址可以写模糊的通配符：
 *          ？：能替代，【任意1个字符】
 *           *：能替代，【任意多个字符 或 1层路径】
 *          **：能替代，【多层路径】
 * @author 伟哥
 * @date 2021-05-07 17:56
 */
@Controller
public class RequestMappingTestAnt {

    /**
     * RequestMapping("/antTest01")
     * 这种方式，只能处理精确的请求
     * @return
     */
    @RequestMapping("/antTest01")
    public String antTest01(){
        System.out.println("antTest01...");
        return "success";
    }

    /**
     * RequestMapping("/antTest0?")
     * 使用？匹配符，能代替【任意1个字符】
     *      1）、但是不填字符，或者"/"，字符，不可以。报错！
     *
     *      2）、@RequestMapping("/antTest01")
     *           RequestMapping("/antTest0?")
     *           模糊匹配 和 精确匹配，一起生效。【优先精确匹配】
     * @return
     */
    @RequestMapping("/antTest0?")
    public String antTest02(){
        System.out.println("antTest02...");
        return "success";
    }

    /**
     * RequestMapping("/antTest0*")
     * 使用*匹配符，能代替【任意多个字符】
     *      1）、不填字符，或者"/"，字符，可以通过，成功
     *
     *      2）、@RequestMapping("/antTest01")
     *          RequestMapping("/antTest0?")
     *          RequestMapping("/antTest0*")
     *          一起生效，优先【精确匹配】 ---> 【？通配符的模糊匹配】 ---> 【*通配符的模糊匹配】
     *
     * @return
     */
    @RequestMapping("/antTest0*")
    public String antTest03(){
        System.out.println("antTest03...");
        return "success";
    }

    /**
     * RequestMapping("/a*、antTest01")
     * *匹配符，匹配/a开头的任意字符/antTest01
     *
     *      匹配规则多个生效，越精确，越优先
     * @return
     */
    @RequestMapping("/a*/antTest01")
    public String antTest04(){
        System.out.println("antTest04...");
        return "success";
    }

    /**
     * RequestMapping("/a/*、antTest01")
     * *匹配符：匹配1层路径
     *      匹配/a/任意字符/antTest01
     *
     *      匹配规则多个生效，越精确，越优先
     *
     * @return
     */
    @RequestMapping("/a/*/antTest01")
    public String antTest05(){
        System.out.println("antTest05...");
        return "success";
    }

    /**
     * **通配符：匹配任意多层路径
     *      匹配规则多个生效，越精确，越优先
     * @return
     */
    @RequestMapping("/a/**/antTest0*")
    public String antTest06(){
        System.out.println("antTest06...");
        return "success";
    }

    /**
     * 场景：
     *      发送请求：/user/admin
     *      发送请求：/user/leifengyang
     *      发现，/user/不变，后面的变量admin、leifengyang在变化
     *
     * 路径上的占位符@RequestMapping("/user/{id}")
     *      占位符的语法：可以在任意路径上，写一个{变量名}
     *          1）、如何获取到变量名呢？
     *              在变量名上，使用@PathVariable("id") String id){
     *          2）、路径占位符，只能获取1层路径，多路径，报错！
     *
     *          3）、还可以获取2层路径RequestMapping("/{user}/{id}")
     *          public String pathVariableTest(@PathVariable("id") String id,@PathVariable("user")String user){
     * @return
     */
    @RequestMapping("/{user}/{id}")
    public String pathVariableTest(@PathVariable("id") String id){
        System.out.println("路径上的占位符{id}的值："+id);
        return "success";
    }


}
